﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ThiagoSoftware.Dados;
using GerTestes.Entity;
using System.Data.SqlClient;

namespace GerTestes.Data
{
    public class DBProjetos
    {
        #region Get Projetos
        public DataTable getProjetos(string pProjeto)
        {
            string SQL = @"SELECT tp.ID_PROJETO,
                                   tp.DESCRICAO,
                                   tp.ID_GERENTE,
                                   tu.NOME AS GERENTE,
                                   tp.ID_ANALISTA,
                                   tu2.NOME AS ANALISTA,
                                   tp.ID_LIDER_TESTE,
                                   tu3.NOME AS LIDER_TESTE,
                                   tp.ATIVO,
                                   CONVERT(VARCHAR, tp.DATA_CADASTRO, 103) AS DATA_CADASTRO
                            FROM   TB_PROJETOS tp
                                   JOIN TB_USUARIOS tu
                                        ON  tu.ID_USUARIO = tp.ID_GERENTE
                                   JOIN TB_USUARIOS tu2
                                        ON  tu2.ID_USUARIO = tp.ID_ANALISTA
                                   JOIN TB_USUARIOS tu3
                                        ON  tu3.ID_USUARIO = tp.ID_LIDER_TESTE";
            if (pProjeto != string.Empty)
                SQL += " WHERE tp.DESCRICAO LIKE @PROJETO + '%'";
            SQL += " ORDER BY tp.DESCRICAO";
            DataAccess db = new DataAccess(SQL);
            if (pProjeto != string.Empty)
                db.AddParam("@PROJETO", SqlDbType.VarChar, pProjeto);
            return db.GetDataTable();
        }
        #endregion

        #region Get Dados Projeto
        public Projeto getDadosProjeto(int pCodigoProjeto)
        {
            string SQL = @"SELECT tp.ID_PROJETO,
                                   tp.DESCRICAO,
                                   tp.ID_GERENTE,
                                   tu.NOME AS GERENTE,
                                   tp.ID_ANALISTA,
                                   tu2.NOME AS ANALISTA,
                                   tp.ID_LIDER_TESTE,
                                   tu3.NOME AS LIDER_TESTE,
                                   tp.ATIVO,
                                   CONVERT(VARCHAR, tp.DATA_CADASTRO, 103) AS DATA_CADASTRO
                            FROM   TB_PROJETOS tp
                                   JOIN TB_USUARIOS tu
                                        ON  tu.ID_USUARIO = tp.ID_GERENTE
                                   JOIN TB_USUARIOS tu2
                                        ON  tu2.ID_USUARIO = tp.ID_ANALISTA
                                   JOIN TB_USUARIOS tu3
                                        ON  tu3.ID_USUARIO = tp.ID_LIDER_TESTE
                            WHERE tp.ID_PROJETO = @ID_PROJETO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROJETO", SqlDbType.Int, pCodigoProjeto);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Projeto project = new Projeto();
                if (dr.Read())
                {
                    project.Codigo = pCodigoProjeto;
                    project.Descricao = dr["DESCRICAO"].ToString();
                    project.Ativo = dr["ATIVO"].ToString();
                    project.CodGerente = Convert.ToInt32(dr["ID_GERENTE"]);
                    project.CodAnalista = Convert.ToInt32(dr["ID_ANALISTA"]);
                    project.CodLider = Convert.ToInt32(dr["ID_LIDER_TESTE"]);                    
                }
                return project;
            }
            catch
            {
                return null;
            }
        }
        #endregion    

        #region Get Percentual Projetos
        public double getPercentualProjetos()
        {
            string SQL = @" DECLARE @PROJETOS_INI NUMERIC(15, 2)
                            DECLARE @PROJETOS NUMERIC(15, 2)

                            SELECT @PROJETOS_INI = COUNT(*)
                            FROM   TB_PROJETOS tp
                            WHERE  tp.ATIVO = 'S'

                            SELECT @PROJETOS = COUNT(*)
                            FROM   TB_PROJETOS tp

                            SELECT CONVERT(NUMERIC(15, 2), (@PROJETOS_INI / @PROJETOS) * 100) AS PERCENTUAL";
            DataAccess db = new DataAccess(SQL);
            return Convert.ToDouble(db.GetDataTable().Rows[0]["PERCENTUAL"]);
        }
        #endregion

        #region Incluir Projeto
        public bool incluirProjeto(Projeto projeto)
        {
            string SQL = @"INSERT INTO TB_PROJETOS
                              (
                                DESCRICAO,
                                ID_GERENTE,
                                ID_ANALISTA,
                                ID_LIDER_TESTE,
                                ATIVO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                @DESCRICAO,
                                @ID_GERENTE,
                                @ID_ANALISTA,
                                @ID_LIDER_TESTE,
                                @ATIVO,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, projeto.Descricao);
            db.AddParam("@ID_GERENTE", SqlDbType.Int, projeto.CodGerente);
            db.AddParam("@ID_ANALISTA", SqlDbType.Int, projeto.CodAnalista);
            db.AddParam("@ID_LIDER_TESTE", SqlDbType.Int, projeto.CodLider);
            db.AddParam("@ATIVO", SqlDbType.VarChar, projeto.Ativo);
            return db.ExecuteNonQuery();
        }
        #endregion

        #region Alterar Projeto
        public bool alterarProjeto(Projeto projeto)
        {
            string SQL = @"UPDATE TB_PROJETOS
                            SET    DESCRICAO       = @DESCRICAO,
                                   ID_GERENTE      = @ID_GERENTE,
                                   ID_ANALISTA     = @ID_ANALISTA,
                                   ID_LIDER_TESTE  = @ID_LIDER_TESTE,
                                   ATIVO           = @ATIVO
                            WHERE  ID_PROJETO      = @ID_PROJETO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, projeto.Descricao);
            db.AddParam("@ID_GERENTE", SqlDbType.Int, projeto.CodGerente);
            db.AddParam("@ID_ANALISTA", SqlDbType.Int, projeto.CodAnalista);
            db.AddParam("@ID_LIDER_TESTE", SqlDbType.Int, projeto.CodLider);
            db.AddParam("@ATIVO", SqlDbType.VarChar, projeto.Ativo);
            db.AddParam("@ID_PROJETO", SqlDbType.Int, projeto.Codigo);
            return db.ExecuteNonQuery();
        }
        #endregion

        #region Excluir Projeto
        public bool excluirProjeto(int pCodProjeto)
        {
            string SQL = @"DELETE 
                            FROM   TB_PROJETOS
                            WHERE  ID_PROJETO = @ID_PROJETO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROJETO", SqlDbType.Int, pCodProjeto);
            return db.ExecuteNonQuery();
        }
        #endregion
    }
}
